import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_give/pages/auth/login_page.dart';
import 'package:flutter_give/pages/tab_page.dart';
import 'package:flutter_give/route/route_utils.dart';
import 'package:flutter_give/sample/configure/constants.dart';

import 'package:flutter_give/utils/LogUtils.dart';
import 'package:flutter_give/utils/constants.dart';
import 'package:flutter_give/utils/persistent_storage.dart';
import 'package:flutter_give/utils/sp_utils.dart';
import 'package:oktoast/oktoast.dart';
import 'package:rapid_kit/rapid_kit.dart';


import 'initialize.dart';

/// 中间处理层
/// 此时实例挂载完毕-路由加载完毕-不受限制
class GuidePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _GuidePageState();
  }
}

class _GuidePageState extends State<GuidePage> {
  final List<Primary> _deviceBasicInfoList = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
      statusBarColor: Color(0xFFffffff), // 设置状态栏颜色
      statusBarIconBrightness: Brightness.dark, // 设置状态栏图标亮度为暗色
    ));

    _loadAgreementStatus();
  }

  // 框架方法
  void navigateToHome() {
    tangeinit();
    // xiyuninit();
    // tokeninit();
  }

  // 探鸽 - 初始化
  void tangeinit() async {
    // LogUtils.e("执行探鸽方法");

    // 探鸽SDK - 加载
    final initialized = await RapidInitialize.init();

    // A-第二个 探鸽配置
    final bufferingEnabled = (await SharedPreferencesUtil.instance
                .getInt(SampleConstants.storageKeyAppConfigVideoBuffering) ??
            1) ==
        1;
    SampleConstants.videoBufferingEnabled = bufferingEnabled;

    if (!initialized) {
      // LogUtils.d('===============探鸽退出登录===================');
      LogUtils.d('===============探鸽退出登录===================');
      // 退出登录
      Loginoutinit();
    }

    // 校验探鸽token
    // 获取本地token
    String? savedAccessToken = await SharedPreferencesUtil.instance
        .getString(SampleConstants.storageKeyLoginToken);
    // 初始化开关
    bool authValid = false;
    // LogUtils.e("执行探鸽方法2${savedAccessToken}");

    // 令牌存在且不为空
    if (savedAccessToken?.isNotEmpty == true) {
      // 使用方法验证token有效性
      // 必须通过api-验证token-远程修改   在执行其他方法
      // 顺序同步执行
      // 不然会  首次登录正常  第二次有token-未登录（远程未验证） 第三次删除token走入死循环
      final authRet = await _onAccessTokenAuth(savedAccessToken);
      authValid = authRet;


      LogUtils.e("执行探鸽方法${authRet}");
      // 验证失败 - 第一次没有token  token失效
      if (!authRet) {
        // 删除本地token
        await SharedPreferencesUtil.instance
            .remove(SampleConstants.storageKeyLoginToken);
        LogUtils.d("===============删除本地token=================");
        Loginoutinit();
        // showToast("============探鸽token失效============");
        showToast("重新登录");
      } else {
        // showToast("===探鸽token正常===");
        // RouteUtils.pushAndRemoveUntil(context, TabPage());
        tokeninit();
      }
    } else {
      Loginoutinit();
    }
  }

  // 犀云-初始化-判断
  void xiyuninit() async {
    // showToast("===========犀云SDK加载===========");
    // RinoSDK.event.userLogoutStream.listen((event) {
    //   WidgetsBinding.instance.addPostFrameCallback((_) {
    //     LogUtils.w("用户已退出，token失效或已在别处登录等");
    //     // showToast("============用户已退出，token失效或已在别处登录等==============");
    //     Loginoutinit();
    //   });
    //   // 重置
    //   GlobalData.store.dispatch(LoggoutAction());
    // });
    // // 犀云-SDK
    // GlobalData.store.dispatch(initSdk());
  }

  // 框架-初始化
  void tokeninit() async {
    // 框架-token
    bool shouldLogin = await initData();
    // showToast("框架token${shouldLogin}");

    // 框架判断 true-登录页 false - 首页
    if (shouldLogin) {
      Loginoutinit();
    } else {
      RouteUtils.pushAndRemoveUntil(context, TabPage());
    }
  }

  // 框架 - 退出登录
  void Loginoutinit() {
    // 框架 跳转登录页面
    RouteUtils.pushAndRemoveUntil(context, LoginPage());
    // 犀牛退出登录
    // await RinoSDK.user.logout();
    // GlobalData.store.dispatch(LoggoutAction());
    // GlobalData.store.dispatch(updateHome());
  }

  // 框架token校验
  Future<bool> initData() async {
    bool shouldLogin = false;
    await SpUtils.getString(Constants.SP_USER_NAME).then((value) {
      // showToast("用户名${value}");
      if (value == null || value == "") {
        shouldLogin = true;
        // showToast("用户名${value}去登录页");
      } else {
        shouldLogin = false;
        // showToast("用户名${value}去登录页");
      }
    });
    return shouldLogin;
  }

  // 验证token方法 - 探鸽
  Future<bool> _onAccessTokenAuth(String? accessToken) async {
    final authResp = await Authenticate.configure(accessToken ?? "");

    if (!mounted) return false;

    if (!authResp.success) {
      return false;
    } else {
      SharedPreferencesUtil.instance
          .setString(SampleConstants.storageKeyLoginToken, accessToken ?? "");
    }

    if (!mounted) return false;
    return true;
  }

  // 判断用户是否同意隐私协议
  void _loadAgreementStatus() async {
    final terms = await SharedPreferencesUtil.instance
        .getBool(SampleConstants.storageKeyAgreementTermsStatus);
    // LogUtils.e(terms);
    // showToast("========隐私协议）${terms}===");
    if (terms != true) {
      // 没同意 - 再次询问隐私协议
      WidgetsBinding.instance.addPostFrameCallback((_) => _showTermsDialog());
    } else {
      // 延迟回调
      // 同意 - 初始化
      // WidgetsBinding.instance.addPostFrameCallback((_) => _navigateToHome());
      tangeinit();
      // xiyuninit();
      // tokeninit();
    }
  }

  // 用户隐私协议
  Future<void> _showTermsDialog() async {
    try {
      showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return WillPopScope(
            onWillPop: () async => false, // 禁止返回键关闭对话框
            child: AlertDialog(
              title: const Text('声明与条款'),
              content: SizedBox(
                height: 200,
                width: double.maxFinite,
                child: Text("123"),
              ),
              actions: <Widget>[
                TextButton(
                  child: const Text('拒绝并退出'),
                  onPressed: () {
                    SystemNavigator.pop();
                  },
                ),
                TextButton(
                  child: const Text('同意'),
                  onPressed: () {
                    Navigator.of(context).pop();
                    //  同意用户隐私协议
                    // 1.把值改为true - 用户隐私协议不在弹出
                    // 初始化
                    SharedPreferencesUtil.instance.setBool(
                        SampleConstants.storageKeyAgreementTermsStatus, true);
                    navigateToHome();
                  },
                ),
              ],
            ),
          );
        },
      );
      // ignore: empty_catches
    } catch (e) {}
  }

  @override
  Widget build(BuildContext context) {
    // 空页面
    return const Scaffold(
      body: Center(
        child: Image(
          image: AssetImage('assets/app_img/ic_launch.png'),
          width: 100,
          height: 100,
        ),
      ),
    );
  }
}
